import java.util.*;

public class Kassa
{
 private KassaRij kassarij;
// private Persoon persoon;
 private int artAantal=0;
 private double totaalPrijs;
 private double prijsperpers;
 private double prijsperpers1;
 public int test;
 //private Dienblad dienblad;
// private int totaalaantalpersonen;



 

 /** 
     * Constructor 
     */ 
    public Kassa(KassaRij kassarij)  
    { 
         this.kassarij = kassarij;
    } 
 
    /** 
     * Deze methode vraagt het aantal artikelen en de totaalprijs op. 
     * De implementatie wordt later vervangen door een echte betaling  
     * door de persoon.  
     * @param persoon die moet afrekenen 
     */ 
    public void rekenAf(Persoon persoon) throws TeWeinigGeldException 
    { 
        
     Dienblad dienblad=persoon.getDienblad();
       Iterator it = dienblad.getDienblad();
       while (it.hasNext())
       {
           Artikel artikelInRij;
           artikelInRij = (Artikel)it.next();
           prijsperpers = artikelInRij.getArtikelPrijs();
           artAantal++;
       }
     
       
     prijsperpers1 = berekenKorting(persoon,prijsperpers);
     
     
     persoon.setBetaalwijze("contant");
     persoon.getBetaalwijze().betaal(prijsperpers1);

//      if (persoon.getBetaalwijze().betaal(prijsperpers1) )
//      {
//          System.out.println("Joepieeee");
           // System.out.println(prijsperpers1);
            prijsperpers1=0;
            totaalPrijs = totaalPrijs + prijsperpers;
//      }
//      
//      else
//      {
//          System.out.println(prijsperpers1);
//          System.out.println("Boeeee");
//      }
     
    }
    
   
    public double getPrijspersoon()
    {  
        return prijsperpers1;
    }
    
    
 
  private double berekenKorting (Persoon persoon, double totaalPrijs1){
        
        if (persoon instanceof KortingskaartHouder)
        {
            KortingskaartHouder kortingkaarthouder;

            if (persoon instanceof Docent) 
            {  
                kortingkaarthouder = (Docent) persoon;
            }
            else if(persoon instanceof Kantinemedewerker) 
            { 
                kortingkaarthouder = (Kantinemedewerker) persoon;
            }
            else {
                return totaalPrijs1;
            } 
            double korting = totaalPrijs1 * kortingkaarthouder.geefKortingsPercentage();
            if (kortingkaarthouder.heeftMaximum() && korting > kortingkaarthouder.geefMaximum())
            { 
                korting = kortingkaarthouder.geefMaximum();
            }

            totaalPrijs1 -= korting;
        }
        return totaalPrijs1;
    }
       
    
 
    /** 
     * Deze methode geeft het aantal artikelen dat de kassa  
     * heeft gepasserd, vanaf het moment dat de methode resetWaarden  
     * is aangeroepen. 
     * @return aantal artikelen 
     */ 
    public int aantalArtikelen()  
    { 
      return artAantal;
        
    } 
    
    /** public double getTotaalPrijs()
    {
       Artikel artikelInRij;
       double totaalPrijs = 0;
       double artikelprijs = 0;
       Iterator it = dienblad.getDienblad();
       while (it.hasNext())
       {
           
           artikelInRij = (Artikel)it.next();
           totaalPrijs = totaalPrijs + artikelInRij.getArtikelPrijs();
           artAantal++;
       }
       
       
       return totaalPrijs ;
       
    }
    /*
    /** 
     * Deze methode geeft het totaalbedrag van alle artikelen die 
     * de kassa zijn gepasseerd, vanaf het moment dat de methode resetKassa  
     * is aangeroepen. 
     * @return hoeveelheid geld in de kassa 
     */ 
    public double hoeveelheidGeldInKassa()  
    { 
        return totaalPrijs;
    }
    
    
    

 
    /** 
     * Deze methode reset de waarden van het aantal gepasseerde artikelen en  
     * de totale hoeveelheid geld in de kassa. 
     */ 
    public void resetKassa() 
    { 
       totaalPrijs = 0;
       artAantal = 0;
       //totaalaantalpersonen=0;

    } 
} 
 